package com.rd.student.ruanjian.class3.gaochenxi.LianXi1.Exception_Folder.TestThrows;

import com.rd.student.ruanjian.class3.gaochenxi.LianXi1.Exception_Folder.Self_Exception.OtherException;

import com.rd.student.ruanjian.class3.gaochenxi.LianXi1.Exception_Folder.Self_Exception.SelfExcption;

public class runThrows {

      public static void main(String[] args) {

            runThrows.Func();

//            try {
//                  throwException();
//
//            } catch (Exception e) {
////                  throw new RuntimeException(e);
//                  e.printStackTrace();
//            }
//            //为什么要捕获异常？
//            /*
//                  因为如果捕获，其实只是增加了异常的打印信息，不会影响后续的程序运行：
//
//                  如果不捕获，在发生异常时
//            */
//            System.out.println("想要打印的信息");
      }

      //如果声明一个方法可能抛出异常，我们需要捕获这个异常并处理。
      //如果方法会抛出异常，但是我们不捕获或不处理，也是一种选择,所以针对RuntimeException，
      //是可以不捕获的，因为它的名字就是运行时异常。

      /*

      如果在调用方法时，
       */
//      public static void throwException() throws Exception {
//
//            throw new NumberFormatException();
//
//      }

      public static void throwException2() throws Exception{

            throw new ClassCastException();
      }

      public static void throwException3() throws Exception {

            throw new SelfExcption();
      }

      //方法后面的Exception要比方法体中的Exception要大，或者等于
      public static void throwException4() throws Exception {

            throw new OtherException();
      }

      public static void Func(){
            try {
                  throwException3();

            }catch (Exception e) {
                  e.printStackTrace();
            }
//            }catch (SelfExcption e){
//                  e.printStackTrace();
//            }在捕获国歌异常时，先捕获子类异常时，再捕获父类异常，如果顺序调转，会提示此异常捕获过，无序捕获
            finally {
                  System.out.println("finally一定会走");
            }
            System.out.println("会走到这里");
      }

}
